/* ===================

AX2E (AXESCON XACML 2.0 Engine) is the Java authorization engine, which implements OASIS XACML 2.0 standard.
Copyright (C) 2007 AXESCON LLC

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA


Contact: AXESCON LLC - info{at}axescon.com

 =================== */
package axescon.xacml.model.shared.attr;

public class YearMonthDurationAttribute extends AbstractAttributeValue {
    public static final String dataType =
            "http://www.w3.org/TR/2002/WD-xquery-operators-20020816#" +
            "yearMonthDuration";

    public String getDataType() {
        return dataType;
    }


    private int sign;
    private long years;
    private long months;

    public YearMonthDurationAttribute(int sign, long years,
                                      long months) {
        this.sign = sign < 0 ? -1 : 1;
        this.years = years;
        this.months = months;

    }

    public long getTotalMonths() {
        return sign * (12 * years + months);
    }

    public boolean equals(Object o) {
        if (!(o instanceof YearMonthDurationAttribute))
            return false;

        YearMonthDurationAttribute other = (YearMonthDurationAttribute) o;

        return (getTotalMonths() == other.getTotalMonths());
    }

    /**
     * Returns the hashcode value used to index and compare this object with
     * others of the same type. Typically this is the hashcode of the backing
     * data object.
     *
     * @return the object's hashcode value
     */
    public int hashCode() {
        return (int) getTotalMonths() ^ (int) (getTotalMonths() >> 32);
    }

    /**
     * Converts to a String representation.
     *
     * @return the String representation
     */
    public String toString() {
        StringBuffer sb = new StringBuffer();
        sb.append("YearMonthDurationAttribute: [\n");
        sb.append("  sign: " + sign);
        sb.append("  years: " + years);
        sb.append("  months: " + months);
        sb.append("]");

        return sb.toString();
    }

}
